package com.dtx.qiku.annodemo;

import com.dtx.qiku.annotation.Value;
import com.dtx.qiku.utils.ProUtils;

import java.lang.reflect.Field;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ValueParser {

    /**
     * 根据传入的 类对象，构建 该类 的 对象
     * @param clz
     * @param <T>
     * @return
     */
    public static <T> T getBean(Class<T> clz) throws Exception{
        T obj = clz.getDeclaredConstructor().newInstance();

        // 获取类中的所有属性
        Field[] fields = clz.getDeclaredFields();

        // 遍历所有的属性
        for (Field field : fields) {
            field.setAccessible(true);
            // 获取属性上的注解
            if (field.isAnnotationPresent(Value.class)) {
                // 获取 Value 注解
                Value val = field.getAnnotation(Value.class);
                // 获取 注解中 value 成员的值
                String value = val.value();

                // 判断 value 中是否包含 ${}
                Pattern p = Pattern.compile("\\$\\{(.*?)\\}");
                Matcher m = p.matcher(value);

                if (m.find()) {
                    String key = m.group(1);
                    //
                    String val2 = ProUtils.getProperty(key);
                }

                // 将数据注入到 属性中
                field.set(obj,value);
            }
        }
        return obj;
    }
}
